package insat.ia.main;

import java.util.ArrayList;
import java.util.List;

import insat.ia.helpers.FileHelpers;

public class Dataengine {

    ArrayList<Fait> BFobjects;
    ArrayList<Regle> BRobjects;


    public Dataengine() {
        super();

        // Chargemment des fichiers
        FileHelpers BF = new FileHelpers("BF");
        FileHelpers BR = new FileHelpers("BR");

        // Chargement des donn�es dans des listes
        BF.createData();
        BR.createData();

		// Creation des objets � partir des listes
        BFobjects = createBF(BF.getData());
        BRobjects = createBR(BR.getData());

    }

    public Dataengine(String f1, String f2) {
        super();

        // Chargemment des fichiers
        FileHelpers BF = new FileHelpers(f1);
        FileHelpers BR = new FileHelpers(f2);

        // Chargement des donn�es dans des listes
        BF.createData();
        BR.createData();

		// Creation des objets � partir des listes
        BFobjects = createBF(BF.getData());
        BRobjects = createBR(BR.getData());

    }

    public void showData() {

        System.out.println("\t \t ** Base des Faits **");
        for (int i = 0; i < BFobjects.size(); i++) {

            System.out.println("\t\t" + BFobjects.get(i));
        }

        System.out.println("\t \t ** Base des Regles **");
        for (int i = 0; i < BRobjects.size(); i++) {

            System.out.println("\t\t" + BRobjects.get(i));
        }

    }

    private ArrayList<Fait> createBF(ArrayList<String> data) {

        List<Fait> BFobjects = new ArrayList<Fait>();

        for (int i = 0; i < data.size(); i++) {

            String[] array = data.get(i).split(" ");

            Fait tmp = new Fait();

            tmp.setNumero(Integer.parseInt(array[0]));
            tmp.setFait(array[1]);

            BFobjects.add(tmp);

        }

        return (ArrayList<Fait>) BFobjects;
    }

    private ArrayList<Regle> createBR(ArrayList<String> data) {

        List<Regle> BRobjects = new ArrayList<Regle>();

        for (int i = 0; i < data.size(); i++) {

            String[] array = (data.get(i)).split(" ");

            Regle tmp = new Regle();

            tmp.setNumero(Integer.parseInt(array[0]));
            for (int j = 1; j < array.length; j++) {

                if ((array[j - 1].equals("si")) || (array[j - 1].equals("et"))) {

                    tmp.setPremisseInList(array[j]);
                } else {
                    if (array[j - 1].equals("alors")) {
                        tmp.setConclusion(array[j]);
                    }
                }
            }
            BRobjects.add(tmp);
        }
        return (ArrayList<Regle>) BRobjects;
    }

    public ArrayList<Fait> getBFobjects() {
        return BFobjects;
    }

    public void setBFobjects(ArrayList<Fait> bFobjects) {
        BFobjects = bFobjects;
    }

    public ArrayList<Regle> getBRobjects() {
        return BRobjects;
    }

    public void setBRobjects(ArrayList<Regle> bRobjects) {
        BRobjects = bRobjects;
    }

    public boolean withBFobjects(String conclusion) {

        boolean test = false;
        for (int i = 0; i < BFobjects.size(); i++) {

            if (BFobjects.get(i).getFait().equals(conclusion)) {
                test = true;
            }

        }
        return test;
    }

        /*
     *  a main method for test
     */
    public static void main(String[] args) {

        // Chargemment des fichiers
        FileHelpers BF = new FileHelpers("BF");
        FileHelpers BR = new FileHelpers("BR");

        // Chargement des donn�es dans des listes
        BF.createData();
        BR.createData();

        // Creation des objets � partir des listes
        Dataengine dataengine = new Dataengine();
        dataengine.BFobjects = dataengine.createBF(BF.getData());
        dataengine.BRobjects = dataengine.createBR(BR.getData());

        // Affichage des objets
        dataengine.showData();

    }

}
